Task register
📄 返回目录页
现代操作系统,都是支持多任务并发运行的,x86架构CPU在硬件层面上提供了专门的机制用来支持多任务的切换,这体现在两个方面:
- CPU内部设置了一个专用的寄存器——任务寄存器TR,它指向当前运行的任务。

- 定义了描述任务的数据结构TSS,里面存储了一个任务的上下文(一系列寄存器的值),下图是一个32位CPU的TSS结构图:

x86CPU的构想是每一个任务对应一个TSS,然后由TR寄存器指向当前的任务,执行任务切换时,修改TR寄存器的指向即可,这是硬件层面的多任务切换机制。
这个构想其实还是很不错的,然而现实却打了脸,包括Linux和Windows在内的主流操作系统都没有使用这个机制来进行线程切换,而是自己使用软件来实现多线程切换。
所以,绝大多数情况下,TR寄存器都是指向固定的,即便线程切换了,TR寄存器仍然不会变化。
注意,我这里说的的是绝大多数情况,而没有说死。虽然操作系统不依靠TSS来实现多任务切换,但这并不意味着CPU提供的TSS操作系统一点也没有使用。还是存在一些特殊情况,如一些异常处理会使用到TSS来执行处理。
下面这张图,展示了控制寄存器Control-register、描述符寄存器Instruction-register、任务寄存器构成的全貌:
